<?php

	class Router {

        private $registry;

        private $path;

        private $args = array();

        function __construct($registry)
		{
                $this->registry = $registry;
        }
		
		function setPath($path)
		{
			$path = trim($path, '/\\');
			$path .= DIRSEP;
	
			if (is_dir($path) == false)
			{
					throw new Exception ('Invalid controller path: `' . $path . '`');
			}
			$this->path = $path;
		}
		
		private function getController(&$file, &$controller, &$action, &$args)
		{
			$route = (empty($_GET['route'])) ? '' : $_GET['route'];
	
			if (empty($route)) { $route = WebApp::app()->baseController; }
	
			// Получаем раздельные части
			$route = trim($route, '/\\');
			$parts = explode('/', $route);
	
			// Находим правильный контроллер
			$cmd_path = $this->path;
			foreach ($parts as $part)
			{
				$fullpath = $cmd_path . $part;

				// Есть ли папка с таким путём?
				if (is_dir($fullpath))
				{
					$cmd_path .= $part . DIRSEP;
					array_shift($parts);
					continue;
				}

				// Находим файл
				if (is_file($fullpath . '.php'))
				{
					$controller = $part;
					array_shift($parts);
					break;
				}
			}
	
			if (empty($controller)) { $controller = WebApp::app()->baseController; };
	
			// Получаем действие
			$action = array_shift($parts);
			if (empty($action)) { $action = false; }
	
			$file = $cmd_path . $controller . '.php';
	
			$args = $parts;
			
		}
		
		function delegate()
		{
			// Анализируем путь
			$this->getController($file, $controller, $action, $args);
			$folder = $controller;
	
			// Файл доступен?
			if (is_readable($file) == false)
			{
				echo 'страницы не существет 404';
				//$controller->beginAction('pagenotfound');
				exit;
			}
	
			// Подключаем файл
			include ($file);
	
			// Создаём экземпляр контроллера
			$class = 'Controller_' . $controller;
			$controller = new $class($this->registry);
			
			//если не задан экшн, вызываем стандартный экшн контроллера
			if(!$action){
				$action = $controller->defaultAction;
			}
	
			// Действие доступно?
			if (is_callable(array($controller, $action)) == false)
			{
				$controller->beginAction('pagenotfound');
				exit;
			}
	
			// Выполняем действие
			//$controller->action();
			if(!file_exists(site_path.'themes'.DIRSEP.WebApp::app()->registry->get('theme').DIRSEP.$folder.DIRSEP.$action.'.tpl'))
			{
				$controller->beginAction('pagenotfound');
				exit;
			}
			
			$controller->beginAction($action, $folder, $args);
		}
	}

?>